package leetcode;
//MyCircularDeque(k)：构造函数,双端队列的大小为k。
//        insertFront()：将一个元素添加到双端队列头部。 如果操作成功返回 true。
//        insertLast()：将一个元素添加到双端队列尾部。如果操作成功返回 true。
//        deleteFront()：从双端队列头部删除一个元素。 如果操作成功返回 true。
//        deleteLast()：从双端队列尾部删除一个元素。如果操作成功返回 true。
//        getFront()：从双端队列头部获得一个元素。如果双端队列为空，返回 -1。
//        getRear()：获得双端队列的最后一个元素。如果双端队列为空，返回 -1。
//        isEmpty()：检查双端队列是否为空。
//        isFull()：检查双端队列是否满了。
public class MyCircularDeque {
   private final int[] data;
   private int size=0,front=0,tail;
    public MyCircularDeque(int k) {
    data=new int[k];
    tail=k-1;
    }

    public boolean insertFront(int value) {
    if(isFull()){
        return false;
    }
    data[front=front==0?data.length-1:front-1]=value;
    size++;
    return true;
    }
    public boolean insertLast(int value) {
   if(isFull()){
       return false;
   }
   data[tail=tail==data.length-1?0:tail+1]=value;
   size++;
   return true;
    }

    public boolean deleteFront() {
    if (isEmpty()){
        return false;
    }
    front=front==data.length-1?0:front+1;
    size--;
    return true;
    }

    public boolean deleteLast() {
   if(isEmpty()){
       return false;
   }
   tail=tail==0?data.length-1:tail-1;
   size--;
   return true;
    }

    public int getFront() {
   if (isEmpty()){
       return -1;
   }
   return data[front];
    }

    public int getRear() {
  if(isEmpty()){
      return -1;
  }
  return data[tail];
    }

    public boolean isEmpty() {
    return size==0;
    }

    public boolean isFull() {
    return size==data.length;
    }
}
//    private final int[] elements;
//    private int size = 0, head = 0, tail;
//    public MyCircularDeque(int k) {
//        elements = new int[k];
//        tail = k - 1;
//    public boolean insertFront(int value) {
//        if (isFull()) return false;
//        elements[head = head == 0 ? elements.length - 1 : head - 1] = value;// 头指针左移
//        size++;
//        return true;
//    }
//    public boolean insertLast(int value) {
//        if (isFull()) return false;
//        elements[tail = tail == elements.length - 1 ? 0 : tail + 1] = value;// 尾指针右移
//        size++;
//        return true;
//    }
//    public boolean deleteFront() {
//        if (isEmpty()) return false;
//        head = head == elements.length - 1 ? 0 : head + 1;// 头指针右移
//        size--;
//        return true;
//    }
//    public boolean deleteLast() {
//        if (isEmpty()) return false;
//        tail = tail == 0 ? elements.length - 1 : tail - 1;// 尾指针左移
//        size--;
//        return true;
//    }
//    public int getFront() {
//        if (isEmpty()) return -1;
//        return elements[head];
//    }
//    public int getRear() {
//        if (isEmpty()) return -1;
//        return elements[tail];
//    }
//    public boolean isEmpty() {
//        return size == 0;
//    }
//    public boolean isFull() {
//        return size == elements.length;
//    }

